# ---------game项目用来抓取4399的游戏名字--------

'''  --scrapy基本流程--

1.项目创建
    scrapy startproject 项目名称
/-项目
    /-spiders
        /-__init__
        /-spider的name(爬虫的名字，这里处理解析数据，是爬虫的主体)
    /-项目               # 项目根目录
        /-__init__.
        /-items         # 封装数据的格式
        /-middlewares   # 所有中间件
        /-pipelines     # 所有的管道
        /-settings      # 项目的配置

2.进入项目
    cd项目名称

3.创建爬虫
    项目下面打开终端 scrapy startproject game
    cd game进到game里面去创建爬虫
    scrapy genspider xiao 4399.com(限制抓取域名的范围)
    # 这里会编码报错 UnicodeDecodeError:
     'gbk' codec can't decode byte 0x81 incdposition 0: incomplete multibyte sequence
    # 解决方案找到报错点把encoding改为utf-8
    # try:
    #                 with open(filename, encoding= 'utf-8') as fp:
    #                     self._read(fp, filename)

    Cannot create a spider with the same name as your project

    D:\Python文件\爬虫\scapy\01scrapy\game>scrapy genspider 4399game 4399.com
    Created spider '4399game' using template 'basic' in module:
      game.spiders.a4399game

4.可能需要修改start_url在spiders里面
    1)在spiders的parse(response)里面对数据进行解析
    def parse(self, response):
    response.text
    response.xpath()
    response.css()
    解析数据的时候需要注意，默认xpath()返回的是Selector对象，想要数据必须使用extract()提取数据
    extract() 返回列表
    extract_first() 返回一个数据
    yield 返回数据 -> 交给pipeline进行持久化存储

    # 重写spiders的parse()方法
    # parse默认是用来处理解析的，引擎对下载器的请求后的response（默认）交给spider的parse方法解析
    # 数据解析处理！！！

    yield dic  # 返回数据到引擎给到管道，yield如果返回的数据，直接可以认为是给了管道pipelines
    记住，管道默认是不生效的，需要到settings打开管道
    管道配置，把注释打开就行
    # Configure item pipelines
    # See https://docs.scrapy.org/en/latest/topics/item-pipeline.html
    ITEM_PIPELINES = {  # 数据_管道
        # key（管道的路径）：300（管道的默认优先级），数越小优先级越高
       "game.pipelines.GamePipeline": 300,
    }
    可以有多个管道，可以自定义管道，必须实现def process_item(self, item, spider)，注意管道的命名

5.在pipeline完成对数据的存储
    class 类名():  #随便取
        ddef process_item(self, item, spider):  # 默认已确定的方法，是处理数据的专用方法 item就是管道传过来的数据
        item： 数据
        spider：爬虫
        return item  # return到下一个管道，否则下一个管道收不到数据

6.设置settings.py文件将pipeline进行生效设置
    ITEM_PIPELINE = {
        '管道的路径': 优先级（数越小优先级越高，默认300）
    }

7.运行爬虫项目
    在爬虫spiders打开终端   scrapy crawl 爬虫名字

    运行 4399game spider
    scrapy crawl 4399game（爬虫的名字不是项目名）
    # 设置日志的级别 debug info warning error critical
    LOG_LEVEL = "WARNING"  # WARNING警告及以上的信息可以打印，消除其他不必要的信息

如何处理 UA、cookies、代理、headers、反爬？
    ----在引擎与下载器Downloader（下载器中间件）、引擎与spider（爬虫中间件）处理




'''

# 这里存放具体的爬虫程序
